

#pragma once


#include "IEventListener.h"


class IEventManager
{
public:

	typedef boost::shared_ptr<IEventManager> Ptr;


	explicit IEventManager( char const * const name ) {}

	virtual ~IEventManager() {}

	virtual bool AddListener ( IEventListener::Ptr const & handler, 
		EventType const & type ) = 0;

	virtual bool RemListener ( IEventListener::Ptr const & handler,
		EventType const & type ) = 0;

	virtual bool Trigger ( Event const & ev ) const = 0;

	virtual bool QueueEvent ( Event::Ptr const & ev ) = 0;

	virtual bool AbortEvent ( EventType const & type,
		bool all = false ) = 0;

	virtual bool Update() = 0;

	virtual bool ValidateType( EventType const & type ) const = 0;

};